/**
 * 日志工具类
 * 统一管理应用中的日志输出，可以根据环境控制日志级别
 */

// 日志级别定义
export const LOG_LEVELS = {
  DEBUG: 0,
  INFO: 1,
  WARN: 2,
  ERROR: 3,
  NONE: 4
};

// 默认配置
const config = {
  // 开发环境显示所有日志，生产环境只显示警告和错误
  level: process.env.NODE_ENV === 'production' ? LOG_LEVELS.WARN : LOG_LEVELS.DEBUG,
  // 是否在日志前添加时间戳
  showTimestamp: true,  // 是否显示相关日志
  showBackupDataLogs: process.env.NODE_ENV === 'development',
  // 是否显示API请求日志
  showApiLogs: process.env.NODE_ENV === 'development',
  // 自定义前缀
  prefix: 'AQM'
};

/**
 * 格式化日志消息
 * @param {string} level - 日志级别
 * @param {string} message - 日志消息
 * @param {any[]} args - 额外参数
 * @returns {Array} - 格式化后的日志参数数组
 */
const formatLogMessage = (level, message, ...args) => {
  const logArgs = [];
  
  // 添加时间戳和前缀
  if (config.showTimestamp) {
    const now = new Date();
    const timeStr = `[${now.toLocaleTimeString()}]`;    logArgs.push(`%c${timeStr} %c${config.prefix} %c${level}`, 
      'color: gray', 
      'color: blue; font-weight: bold', 
      level === 'ERROR' ? 'color: red; font-weight: bold' : 
      level === 'WARN' ? 'color: orange' : 
      level === 'BACKUP' ? 'color: teal; font-weight: bold' : 
      level === 'INFO' ? 'color: green' : 'color: gray');
  } else {    logArgs.push(`%c${config.prefix} %c${level}`, 
      'color: blue; font-weight: bold', 
      level === 'ERROR' ? 'color: red; font-weight: bold' : 
      level === 'WARN' ? 'color: orange' : 
      level === 'BACKUP' ? 'color: teal; font-weight: bold' : 
      level === 'INFO' ? 'color: green' : 'color: gray');
  }
  
  // 添加消息
  logArgs.push(message);
  
  // 添加额外参数
  if (args && args.length > 0) {
    logArgs.push(...args);
  }
  
  return logArgs;
};

/**
 * 日志类
 */
class Logger {
  /**
   * 设置日志配置
   * @param {Object} newConfig - 新的配置
   */
  static setConfig(newConfig) {
    Object.assign(config, newConfig);
  }
  
  /**
   * 获取当前配置
   * @returns {Object} - 当前配置
   */
  static getConfig() {
    return { ...config };
  }
  
  /**
   * 调试日志
   * @param {string} message - 日志消息
   * @param  {...any} args - 额外参数
   */
  static debug(message, ...args) {
    if (config.level <= LOG_LEVELS.DEBUG) {
      console.debug(...formatLogMessage('DEBUG', message, ...args));
    }
  }
  
  /**
   * 信息日志
   * @param {string} message - 日志消息
   * @param  {...any} args - 额外参数
   */
  static info(message, ...args) {
    if (config.level <= LOG_LEVELS.INFO) {
      console.info(...formatLogMessage('INFO', message, ...args));
    }
  }
  
  /**
   * 警告日志
   * @param {string} message - 日志消息
   * @param  {...any} args - 额外参数
   */
  static warn(message, ...args) {
    if (config.level <= LOG_LEVELS.WARN) {
      console.warn(...formatLogMessage('WARN', message, ...args));
    }
  }
  
  /**
   * 错误日志
   * @param {string} message - 日志消息
   * @param  {...any} args - 额外参数
   */
  static error(message, ...args) {
    if (config.level <= LOG_LEVELS.ERROR) {
      console.error(...formatLogMessage('ERROR', message, ...args));
    }
  }
  /**
   * 系统日志
   * @param {string} message - 日志消息
   * @param  {...any} args - 额外参数
   */
  static backupData(message, ...args) {
    if (config.showBackupDataLogs && config.level <= LOG_LEVELS.INFO) {
      console.info(...formatLogMessage('BACKUP', message, ...args));
    }
  }/**
   * API日志
   * @param {string} message - 日志消息
   * @param  {...any} args - 额外参数
   */
  // eslint-disable-next-line no-unused-vars
  static api(message, ...args) {
    if (config.showApiLogs && config.level <= LOG_LEVELS.INFO) {
      console.info(...formatLogMessage('API', message, ...args));
    }
  }
  // eslint-enable no-unused-vars
}

export default Logger; 